package ru.niir.goodfil.db.handlers;

import ru.niir.goodfil.db.Notification;
import ru.niir.goodfil.db.GoodfilUtils;
import ru.niir.goodfil.utils.validation.ValidationResult;
import ru.niir.goodfil.utils.validation.ValidationError;
import ru.niir.goodfil.utils.validation.ValidationProblem;
import ru.niir.goodfil.exceptions.WrongHandlerException;
import static org.apache.commons.lang.StringUtils.isEmpty;
import static org.apache.commons.lang.StringUtils.isBlank;

/**
 * Обработчик для уведомлений
 * @see ru.niir.goodfil.db.Notification уведомления
 */
public class NotificationHandler extends Handler
{
    public NotificationHandler(Goodfil gf)
    {
        super(Notification.class, gf);
    }

    /**
     * Проверки уведомлений
     * 1. notificationState в допустимом диапазоне (FK)
     * 2. recipient не пустой
     * 3. text не пустой
     * @param o уведомление
     * @return результат проверки
     */
    @Override
    public ValidationResult validate(Object o)
    {
        assert o != null;
        if (!(o instanceof Notification)) throw new WrongHandlerException(klass, o.getClass());

        Notification notification = (Notification) o;
        ValidationResult vresult = ValidationResult.Ok(klass);

        if (isBlank(notification.getRecipient()))
            vresult.addValidationError(new ValidationError("recipient", "Получатель", notification.getRecipient(), ValidationProblem.NOT_EMPTY));

        if (isBlank(notification.getText()))
            vresult.addValidationError(new ValidationError("text", "Текст сообщения", notification.getRecipient(), ValidationProblem.NOT_EMPTY));
            
        return vresult;
    }

    @Override
    public void preSave(Object o)
    {
        assert o != null;
        if (!(o instanceof Notification)) throw new WrongHandlerException(klass, o.getClass());

        Notification notification = (Notification) o;
        notification.setCreationDate(GoodfilUtils.getCurrentTimestamp());
    }
}
